#include "Xunxian.h"

extern uint8_t x1,x2,x3,x4,x5,x6,x7,x8;
extern uint8_t sensor_pattern;
extern int err;
extern uint8_t L_Zhuanwan;
// 循迹主逻辑函数：根据传感器输入判断偏差
void Xunxian(void)
{
    // // 极左偏：仅右侧传感器检测到轨道（可能为左转或丢线）
    // if(x1 == 0 && x2 == 0  && x3 == 0 && x4 == 0 && x5 == 0 && x6 == 1  && x7 == 1 && x8 == 1)
    // {
    //     err = -10;
    // }
    // else if(x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    // {
    //     err = -10;
    // }
    // else if(x1 == 0 && x2 == 0 && x3 == 0 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    // {
    //     err = -10;
    // }

    // // 极右偏：左侧传感器全感应
    // else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 0 && x5 == 0 && x6 == 0 && x7 == 0 && x8 == 0)
    // {
    //     err = 10;
    // }
    // else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 0 && x6 == 0 && x7 == 0 && x8 == 0)
    // {
    //     err = 10;
    // }
    // else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 0 && x7 == 0 && x8 == 0)
    // {
    //     err = 10;
    // }

    // // 左直角转
    // if(x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    // {
    //     err = -20;
    // }

    // //右直角转
    // else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 0 && x6 == 0 && x7 == 0 && x8 == 0)
    // {
    //     err = 35;
    // }

    // // 极左急转信号
    // else if((x1 == 0 && x2 == 1 && x3 == 1) && (x6 == 0 || x7 == 0 || x8 == 0))
    // {
    //     err = -45;
    // }

    // 极右急转信号
    // else if((x8 == 0 && x4 == 0 && x5 == 1) ||
    //         (x8 == 0 && x7 == 0 && x1 == 0 && x2 == 0 && x4 == 1 && x5 == 1) ||
    //         ((x8 == 0 && x7 == 1 && x6 == 1) && (x1 == 0 || x2 == 0 || x3 == 0)))
    // {
    //     err = 45;
    // }

    // 正常偏差判断（偏左）
    if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = -2;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 1 && x3 == 0 && x4 == 0 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = -3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 0 && x3 == 0 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = -3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 0 && x2 == 0 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = -3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 0 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = -4;
        L_Zhuanwan = 0;
    }

    // 正常偏差判断（偏右）
    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 0 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = 2;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 0 && x6 == 0 && x7 == 1 && x8 == 1)
    {
        err = 3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 0 && x7 == 0 && x8 == 1)
    {
        err = 3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 0 && x8 == 0)
    {
        err = 3;
        L_Zhuanwan = 0;
    }

    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 0)
    {
        err = 4;
        L_Zhuanwan = 0;
    }

    // 正中，直行状态
    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 0 && x5 == 0 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        err = 0;
        L_Zhuanwan = 0;
    }
    else if(x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1 && x5 == 1 && x6 == 1 && x7 == 1 && x8 == 1)
    {
        L_Zhuanwan = 1;
    }


}

